
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2007, Arizona State University
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//  Author(s): Adam Kubach
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  Base class for functors.
//
///////////////////////////////////////////////////////////////////////////////

#include "BaseFunctor.h"

using namespace Usul::Functors::Interaction::Common;


///////////////////////////////////////////////////////////////////////////////
//
//  Constructor.
//
///////////////////////////////////////////////////////////////////////////////

BaseFunctor::BaseFunctor ( Unknown *caller, const std::string &name ) : BaseClass(),
  _caller ( caller )
{
  this->name ( name );
}


///////////////////////////////////////////////////////////////////////////////
//
//  Copy constructor.
//
///////////////////////////////////////////////////////////////////////////////

BaseFunctor::BaseFunctor ( const BaseFunctor &cb ) : BaseClass ( cb ),
  _caller ( cb._caller )
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

BaseFunctor::~BaseFunctor()
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Return the unknown pointer.
//
///////////////////////////////////////////////////////////////////////////////

const Usul::Interfaces::IUnknown *BaseFunctor::caller() const
{
  Guard guard ( this->mutex() );
  return _caller.get();
}


///////////////////////////////////////////////////////////////////////////////
//
//  Return the unknown pointer.
//
///////////////////////////////////////////////////////////////////////////////

Usul::Interfaces::IUnknown *BaseFunctor::caller()
{
  Guard guard ( this->mutex() );
  return _caller.get();
}


///////////////////////////////////////////////////////////////////////////////
//
//  Set the caller.
//
///////////////////////////////////////////////////////////////////////////////

void BaseFunctor::caller( Unknown * caller )
{
  Guard guard ( this->mutex() );
  _caller = caller;
}
